#include <iostream>
class Example {
    public:
    Example(int f):feet(f){inches = 12 * f;};
    int inches;
    int feet;
    void show_ft();
    void show_inch();
};

void Example::show_ft() {
    std::cout << "show_ft: " << feet << std::endl;
}

void Example::show_inch() {
    std::cout << "show_inch: " << inches << std::endl;
}

int main(int argc, char const *argv[])
{
    //获取成员属性指针
    Example e1(10);
    Example e2(20);
    // 定义一个成员属性指针，相同类型的成员指针可以互相赋值
    // 成员指针和普通指针不一样，它存的是“成员在类对象内的偏移信息”，不能直接用，需要和一个对象结合才能得到值
    int Example:: *intp;
    intp = &Example::inches;

    std::cout << "e1.*intp = " << e1.*intp << std::endl;
    intp = &Example::feet;
    std::cout << "e2.*intp = " << e2.*intp << std::endl;

    // 定义一个成员函数指针，相同类型的成员指针可以互相赋值
    void (Example::*fp)();
    fp = &Example::show_ft;
    std::cout << "(e1.*fp)()" << std::endl;
    (e1.*fp)();
    fp = &Example::show_inch;
    std::cout << "(e2.*fp)()" << std::endl;
    (e2.*fp)();
    return 0;
}
